package guiasaude.reps;

import excecoes.ObjetoInexistenteException;
import excecoes.ObjetoJaExistenteException;
import excecoes.RepositorioException;
import guiasaude.Especialidade;
import util.Excecoes;

public class RepositorioEspecialidadeArray implements IRepositorioEspecialidade {

	private Especialidade[] vetor;

	private int indice;

	private int geraCodigo = 0; // para gerar codigos

	public RepositorioEspecialidadeArray() {
		vetor = new Especialidade[100];
		indice = 0;
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#insere(guiasaude.Especialidade)
	 */
	public void insere(Especialidade esp) throws RepositorioException,
			ObjetoJaExistenteException {

		esp.setCodigo(++geraCodigo);

		if (indice == this.vetor.length) {
			throw new RepositorioException("Erro ao incluir no array");
		}

		if (this.existe(esp.getCodigo())) {
			throw new ObjetoJaExistenteException("Objeto jah existe no array");
		}

		this.vetor[indice] = esp;
		indice++;
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#atualiza(guiasaude.Especialidade)
	 */
	public void atualiza(Especialidade esp) throws RepositorioException,
			ObjetoInexistenteException {
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#deleta(int)
	 */
	public void deleta(int codigo) throws RepositorioException,
			ObjetoInexistenteException {
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#existe(int)
	 */
	public boolean existe(int codigo) throws RepositorioException {

		int indiceAux = 0;
		boolean existe = false;

		for (int i = 0; i < indice; i++) {
			if (this.vetor[i].getCodigo() == codigo) {
				indiceAux = i;
				existe = true;

				break;
			}
		}

		return existe;
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#procura(int)
	 */
	public Especialidade procura(int codigo) throws RepositorioException,
			ObjetoInexistenteException {

		int i = 0;

		while (i < indice) {
			if (vetor[i].getCodigo() == codigo) {
				return vetor[i];
			}

			i++;
		}

		throw new ObjetoInexistenteException(Excecoes.EXC_FALHA_PROCURA);
	}

	public IRepositorioEspecialidade getListaEspecialidade()
			throws RepositorioException, ObjetoInexistenteException {
		return this;
	}

	/* (non-Javadoc)
	 * @see guiasaude.reps.IRepositorioEspecialidade#size()
	 */
	public int size() {
		return this.indice;
	}

	public Especialidade getElemento(int posicao) {
		if (posicao < indice)
			return this.vetor[posicao];
		else
			return null;
	}

}
